home *** CD-ROM | disk | FTP | other *** search
Text File | 1997-07-18 | 13.9 KB | 688 lines | [TEXT/CWIE] |
- // >>> ⌐ 1996-1997 Microsoft Corporation. All rights reserved. <<<
-
- #include <drag.h>
- #include <Menus.h>
- #include "ActiveXAPI.h"
- #include "ExplorerAPI.h"
- #include "CanDoAPI.h"
- #include "InfoAPI.h"
- #include "App.h"
- #include "Document.h"
- #include "Figure.h"
- #include "Menus.h"
- #include "MenusPrivate.h"
- #include "ObjectInfoWin.h"
- #include "Print.h"
-
-
- // menus
- static void DoAppleMenu(short MenuItem);
- static void DoFileMenu(short MenuItem);
- static void DoEditMenu(short MenuItem);
- static void DoNavigateMenu(short MenuItem);
- static void DoPanesMenu(short MenuItem);
-
- // menu items
- static void DoAboutDialog(void);
- static void DoFindDialog(AXRefID SiteID);
- static void DoGoToDialog(AXRefID SiteID);
- static void DoInsertDialog(void);
-
-
- //
- // SetupMenus
- //
- void SetupMenus(Boolean UseIEMBar)
- /*
- read a menubar from the resource fork and make it the current menu.
- */
- {
- static Boolean DoAppleMenu = true;
- Handle menuBar;
-
- /* Add the menu bar
- */
- menuBar = GetNewMBar(UseIEMBar ? rIEMenuBar : rMenuBar); /*read menus into menu bar*/
- SetMenuBar(menuBar); /*install menus*/
- DisposeHandle((Handle) menuBar);
-
- if (DoAppleMenu) /* add DA names to Apple menu exactly ONCE */
- {
- AppendResMenu(GetMenuHandle(mApple), 'DRVR');
- DoAppleMenu = false;
- }
-
- DrawMenuBar();
- }
-
-
- //
- // AdjustMenus
- //
- void AdjustMenus(void)
- {
- FigureDataPtr FocusFigure = gAppData.FocusFigure;
- FigureDataPtr SelectedFigure = gAppData.SelectedFigure;
- MenuHandle WhichMenu;
- WindowRef FrontW = FrontWindow();
- DocDataPtr CurrentDoc = nil;
-
- if ( FrontW && FrontW != gInfoWindow )
- CurrentDoc = (DocDataPtr) GetWRefCon(FrontW);
-
- WhichMenu = GetMenuHandle(mFile);
- if (WhichMenu)
- {
- EnableItem(WhichMenu, iNew);
-
- if (CurrentDoc)
- {
- EnableItem(WhichMenu, iInsert);
- EnableItem(WhichMenu, iSaveAs);
- EnableItem(WhichMenu, iPageSetup);
- EnableItem(WhichMenu, iPrint);
-
- if (CurrentDoc && CurrentDoc->Dirty)
- {
- EnableItem(WhichMenu, iSave);
- }
- else
- {
- DisableItem(WhichMenu, iSave);
- }
- }
- else
- {
- DisableItem(WhichMenu, iInsert);
- DisableItem(WhichMenu, iSaveAs);
- DisableItem(WhichMenu, iSave);
- DisableItem(WhichMenu, iPageSetup);
- DisableItem(WhichMenu, iPrint);
- }
-
-
- if (FrontWindow())
- EnableItem(WhichMenu, iClose);
- else
- DisableItem(WhichMenu, iClose);
-
- EnableItem(WhichMenu, iQuit);
- }
-
- #if 0
- if (WhichMenu && SelectedFigure)
- {
- if (AX_Can(SelectedFigure->Site, NULL, kAXPageSetupCanDoID) == S_OK)
- EnableItem(WhichMenu, iPageSetup);
- else
- DisableItem(WhichMenu, iPageSetup);
-
- if (AX_Can(SelectedFigure->Site, NULL, kAXPrintCanDoID) == S_OK)
- EnableItem(WhichMenu, iPrint);
- else
- DisableItem(WhichMenu, iPrint);
- }
- else
- {
- DisableItem(WhichMenu, iPageSetup);
- DisableItem(WhichMenu, iPrint);
- }
- #endif
-
- WhichMenu = GetMenuHandle(mEdit);
- if (WhichMenu && FocusFigure)
- {
- if (AX_Can(FocusFigure->Site, NULL, kAXUndoCanDoID) == S_OK)
- EnableItem(WhichMenu, iUndo);
- else
- DisableItem(WhichMenu, iUndo);
-
- if (AX_Can(FocusFigure->Site, NULL, kAXCutCanDoID) == S_OK)
- EnableItem(WhichMenu, iCut);
- else
- DisableItem(WhichMenu, iCut);
-
- if (AX_Can(FocusFigure->Site, NULL, kAXCopyCanDoID) == S_OK)
- EnableItem(WhichMenu, iCopy);
- else
- DisableItem(WhichMenu, iCopy);
-
- if (AX_Can(FocusFigure->Site, NULL, kAXPasteCanDoID) == S_OK)
- EnableItem(WhichMenu, iPaste);
- else
- DisableItem(WhichMenu, iPaste);
-
- if (AX_Can(FocusFigure->Site, NULL, kAXClearCanDoID) == S_OK)
- EnableItem(WhichMenu, iClear);
- else
- DisableItem(WhichMenu, iClear);
-
- if (AX_Can(FocusFigure->Site, NULL, kAXSelectAllCanDoID) == S_OK)
- EnableItem(WhichMenu, iSelectAll);
- else
- DisableItem(WhichMenu, iSelectAll);
-
- if (AX_Can(FocusFigure->Site, NULL, kAXFindCanDoID) == S_OK)
- EnableItem(WhichMenu, iFind);
- else
- DisableItem(WhichMenu, iFind);
-
- }
- else if (WhichMenu)
- {
- DisableItem(WhichMenu, iUndo);
- DisableItem(WhichMenu, iCut);
- DisableItem(WhichMenu, iCopy);
- DisableItem(WhichMenu, iPaste);
- DisableItem(WhichMenu, iClear);
- DisableItem(WhichMenu, iSelectAll);
- DisableItem(WhichMenu, iFind);
- }
-
- if ( WhichMenu && SelectedFigure )
- {
- char UserName[64];
- AXErrorCode err = AX_GetIDString(SelectedFigure->Site, 0, kAXUserName, 64, UserName);
- if ( err == kAXNoErr )
- {
- char ItemText[64] = "Show Object Info for ";
-
- strcat(ItemText, UserName);
- EnableItem(WhichMenu, iShowDesc);
- SetMenuItemText(WhichMenu, iShowDesc, CtoPstr(ItemText));
- }
- else
- DisableItem(WhichMenu, iShowDesc);
- }
- else if (WhichMenu)
- {
- DisableItem(WhichMenu, iShowDesc);
- }
-
- WhichMenu = GetMenuHandle(mNavigate);
- if (WhichMenu && FocusFigure)
- {
- if (AX_Can(FocusFigure->Site, NULL, kAXGoForwardCanDoID) == S_OK)
- EnableItem(WhichMenu, iGoForward);
- else
- DisableItem(WhichMenu, iGoForward);
-
- if (AX_Can(FocusFigure->Site, NULL, kAXGoBackCanDoID) == S_OK)
- EnableItem(WhichMenu, iGoBackward);
- else
- DisableItem(WhichMenu, iGoBackward);
-
- if (AX_Can(FocusFigure->Site, NULL, kAXCancelCanDoID) == S_OK)
- EnableItem(WhichMenu, iCancelLoad);
- else
- DisableItem(WhichMenu, iCancelLoad);
-
- if (AX_Can(FocusFigure->Site, NULL, kAXReloadCanDoID) == S_OK)
- EnableItem(WhichMenu, iReload);
- else
- DisableItem(WhichMenu, iReload);
-
- if (AX_IEHasBasicInterface(FocusFigure->Site))
- EnableItem(WhichMenu, iGoTo);
- else
- DisableItem(WhichMenu, iGoTo);
- }
-
- WhichMenu = GetMenuHandle(mPanes);
- if (WhichMenu && FocusFigure)
- {
- if (AX_IEHasBasicInterface(FocusFigure->Site))
- {
- EnableItem(WhichMenu, iShowAddress);
- EnableItem(WhichMenu, iShowStatus);
- }
- else
- {
- DisableItem(WhichMenu, iShowAddress);
- DisableItem(WhichMenu, iShowStatus);
- }
- }
- }
-
-
- //
- // DoMenu
- //
- void DoMenu(long menuResult)
- {
- short menuID;
- short menuItem;
-
- menuID = HiWord(menuResult);
- menuItem = LoWord(menuResult);
-
- switch (menuID)
- {
- case mApple:
- DoAppleMenu(menuItem);
- break;
-
- case mFile:
- DoFileMenu(menuItem);
- break;
-
- case mEdit:
- DoEditMenu(menuItem);
- break;
-
- case mNavigate:
- DoNavigateMenu(menuItem);
- break;
-
- case mPanes:
- DoPanesMenu(menuItem);
- break;
-
- }
- HiliteMenu(0);
- }
-
-
- //
- // DoAppleMenu
- //
- void DoAppleMenu(short inMenuItem)
- {
- Str255 accName;
- short accNumber;
-
- switch (inMenuItem)
- {
- case iAbout:
- DoAboutDialog();
- break;
- default:
- GetMenuItemText(GetMenuHandle(mApple), inMenuItem, accName);
- accNumber = OpenDeskAcc(accName);
- break;
- }
- }
-
-
- //
- // DoFileMenu
- //
- void DoFileMenu(short MenuItem)
- {
- FigureDataPtr FocusFigure = gAppData.FocusFigure;
-
- switch (MenuItem)
- {
- case iNew:
- CreateDocument(&gAppData.Documents, "\pUntitled");
- break;
- case iOpen:
- OpenDocument();
- break;
- case iInsert:
- DoInsertDialog();
- break;
- case iClose:
- DoClose(FrontWindow());
- break;
- case iSave:
- DoSave((DocDataPtr) GetWRefCon(FrontWindow()));
- break;
- case iSaveAs:
- DoSaveAs((DocDataPtr) GetWRefCon(FrontWindow()));
- break;
- case iPageSetup:
- DoPageSetup((DocDataPtr) GetWRefCon(FrontWindow()));
- // AX_Do(FocusFigure->Site, NULL, kAXPageSetupCanDoID, NULL);
- break;
- case iPrint:
- DoPrintDocument((DocDataPtr) GetWRefCon(FrontWindow()));
- // AX_Do(FocusFigure->Site, NULL, kAXPrintCanDoID, NULL);
- break;
- case iQuit:
- gAppData.Quitting = true;
- break;
- }
- }
-
- #define ALRT_SaveChangesClosing 201
- #define ANSWER_SAVE 1
- #define ANSWER_CANCEL 2
- //
- // DoClose
- //
- void DoClose(WindowPtr inWindow)
- {
- if ( inWindow == gInfoWindow )
- CloseInfoWindow(FrontWindow());
- else
- {
- DocDataPtr CurrentDoc = (DocDataPtr) GetWRefCon(inWindow);
-
- Boolean closeIt = true;
-
- if (CurrentDoc->Dirty)
- {
- short answer;
-
- ParamText(CurrentDoc->HasSaveFile ? CurrentDoc->SaveFile.name : "\pUntitled",
- "\p", "\p", "\p");
- answer = CautionAlert(ALRT_SaveChangesClosing, nil);
-
- if (answer == ANSWER_SAVE)
- {
- if (CurrentDoc->HasSaveFile)
- {
- DoSave(CurrentDoc);
- }
- else
- {
- closeIt = DoSaveAs(CurrentDoc);
- }
-
- }
- else if (answer == ANSWER_CANCEL)
- {
- closeIt = false;
- }
- }
-
- if (closeIt)
- {
- ActivateDocument(CurrentDoc, kAXWindowDeactivate, NULL);
- DisposeDocument(CurrentDoc);
- }
- }
- }
-
-
- //
- // DoEditMenu
- //
- void DoEditMenu(short MenuItem)
- {
- FigureDataPtr FocusFigure = gAppData.FocusFigure;
- FigureDataPtr SelectedFigure = gAppData.SelectedFigure;
- WindowPtr FrontWin = FrontWindow();
-
- if (FocusFigure)
- {
- switch (MenuItem)
- {
- case iUndo:
- AX_Do(FocusFigure->Site, NULL, kAXUndoCanDoID, NULL);
- break;
- case iCut:
- AX_Do(FocusFigure->Site, NULL, kAXCutCanDoID, NULL);
- break;
- case iCopy:
- AX_Do(FocusFigure->Site, NULL, kAXCopyCanDoID, NULL);
- break;
- case iPaste:
- AX_Do(FocusFigure->Site, NULL, kAXPasteCanDoID, NULL);
- break;
- case iClear:
- AX_Do(FocusFigure->Site, NULL, kAXClearCanDoID, NULL);
- break;
- case iSelectAll:
- AX_Do(FocusFigure->Site, NULL, kAXSelectAllCanDoID, NULL);
- break;
- case iFind:
- DoFindDialog(FocusFigure->Site);
- break;
- default:
- break;
- }
- }
- else if ( SelectedFigure )
- {
- switch (MenuItem)
- {
- case iShowDesc:
- OpenInfoWindow(SelectedFigure->Site);
- break;
-
- default:
- break;
- }
- }
-
- }
-
-
- //
- // DoNavigateMenu
- //
- void DoNavigateMenu(short MenuItem)
- {
- FigureDataPtr FocusFigure = gAppData.FocusFigure;
-
- if (FocusFigure)
- {
- switch (MenuItem)
- {
- case iGoForward:
- AX_Do(FocusFigure->Site, NULL, kAXGoForwardCanDoID, NULL);
- break;
- case iGoBackward:
- AX_Do(FocusFigure->Site, NULL, kAXGoBackCanDoID, NULL);
- break;
- case iCancelLoad:
- AX_Do(FocusFigure->Site, NULL, kAXCancelCanDoID, NULL);
- break;
- case iReload:
- AX_Do(FocusFigure->Site, NULL, kAXReloadCanDoID, NULL);
- break;
- case iGoTo:
- DoGoToDialog(FocusFigure->Site);
- break;
- default:
- break;
- }
- }
- }
-
-
- //
- // DoPanesMenu
- //
- void DoPanesMenu(short MenuItem)
- {
- static Boolean8 AddressVisible = true;
- static Boolean8 StatusVisible = true;
-
- AXIEFeatureType What = kAXBeginIEFeatureType;
- Boolean ShowIt;
- FigureDataPtr FocusFigure = gAppData.FocusFigure;
-
- if (FocusFigure)
- {
- switch (MenuItem)
- {
- case iShowAddress:
- ShowIt = AddressVisible = !AddressVisible;
- What = kAXIEAddressFeatureType;
- break;
- case iShowStatus:
- ShowIt = StatusVisible = !StatusVisible;
- What = kAXIEStatusFeatureType;
- break;
- default:
- break;
- }
-
- if (What != kAXBeginIEFeatureType)
- AX_IEShowFeature(FocusFigure->Site, What, ShowIt);
- }
- }
-
-
- //
- // DoAboutDialog
- //
- void DoAboutDialog(void)
- {
- DialogPtr DlogPtr;
-
- if ((DlogPtr = GetNewDialog(ABOUT_DLOG, NULL, (WindowPtr) -1)) != NULL)
- {
- Boolean Done = false;
- Int16 ItemHit;
-
- // set dialog behavior
- SetDialogDefaultItem(DlogPtr, OK_BUTTON);
- SetDialogTracksCursor(DlogPtr, true);
-
- // wait for okay button
- do
- ModalDialog(NULL, &ItemHit);
- while (ItemHit != OK_BUTTON);
-
- DisposeDialog(DlogPtr);
- }
- }
-
-
- //
- // DoInsertDialog
- //
- void DoInsertDialog(void)
- {
- StandardFileReply Reply;
-
- StandardGetFile(NULL, 0, NULL, &Reply);
- if (Reply.sfGood)
- NewFigureFromFileSpec((DocDataPtr) GetWRefCon(FrontWindow()),
- &Reply.sfFile, NULL);
- }
-
-
- //
- // DoFindDialog
- //
- void DoFindDialog(AXRefID SiteID)
- {
- DialogPtr DlogPtr;
-
- if ((DlogPtr = GetNewDialog(FIND_DLOG, NULL, (WindowPtr) -1)) != NULL)
- {
- Boolean Done = false;
- Handle ItemHandle;
- ControlHandle CHandle;
- Int16 ItemHit;
- AXCanDoFindParams findInfo;
- Rect IRect;
- Int16 IType;
- Boolean8 CaseSensitiveSetting = false;
- Boolean8 FromTopSetting = false;
-
- // set dialog behavior
- SetDialogDefaultItem(DlogPtr, OK_BUTTON);
- SetDialogCancelItem(DlogPtr, CANCEL_BUTTON);
- SetDialogTracksCursor(DlogPtr, true);
-
- // set dialog fields
- GetDialogItem(DlogPtr, FIND_TEXT, &IType, &(Handle)ItemHandle, &IRect);
- SetDialogItemText(ItemHandle, "\p");
- SelectDialogItemText(DlogPtr, FIND_TEXT, 0, 32767);
- GetDialogItem(DlogPtr, CASE_SENSITIVE_BOX, &IType, &(Handle)CHandle, &IRect);
- SetControlValue(CHandle, 0);
- GetDialogItem(DlogPtr, FROM_TOP_BOX, &IType, &(Handle)CHandle, &IRect);
- SetControlValue(CHandle, 0);
-
- do
- {
- ModalDialog(NULL, &ItemHit);
- switch (ItemHit)
- {
- case CASE_SENSITIVE_BOX:
- GetDialogItem(DlogPtr, CASE_SENSITIVE_BOX, &IType, &(Handle)CHandle, &IRect);
- CaseSensitiveSetting = CaseSensitiveSetting ? 0 : 1;
- SetControlValue(CHandle, CaseSensitiveSetting);
- break;
- case FROM_TOP_BOX:
- GetDialogItem(DlogPtr, FROM_TOP_BOX, &IType, &(Handle)CHandle, &IRect);
- FromTopSetting = FromTopSetting ? 0 : 1;
- SetControlValue(CHandle, FromTopSetting);
- break;
- case OK_BUTTON:
- {
- Uchar8 FindStr[257];
-
- GetDialogItemText(ItemHandle, FindStr);
- *(FindStr + *FindStr + 1) = '\0';
- findInfo.SearchText = (char *)FindStr + 1;
- findInfo.CaseSensitive = CaseSensitiveSetting;
- findInfo.FromTop = FromTopSetting;
- AX_Do(SiteID, NULL, kAXFindCanDoID, &findInfo);
- }
- // deliberate fall through
- case CANCEL_BUTTON:
- Done = true;
- break;
- default:
- break;
- }
- }
- while (!Done);
-
- DisposeDialog(DlogPtr);
- }
- }
-
-
- //
- // DoGoToDialog
- //
- void DoGoToDialog(AXRefID SiteID)
- {
- DialogPtr DlogPtr;
-
- if ((DlogPtr = GetNewDialog(GOTO_URL_DLOG, NULL, (WindowPtr) -1)) != NULL)
- {
- Boolean Done = false;
- Handle ItemHandle;
- Int16 ItemHit;
-
- // set dialog behavior
- SetDialogDefaultItem(DlogPtr, OK_BUTTON);
- SetDialogCancelItem(DlogPtr, CANCEL_BUTTON);
- SetDialogTracksCursor(DlogPtr, true);
-
- // set field text
- {
- Rect IRect;
- Int16 IType;
-
- GetDialogItem(DlogPtr, URL_TEXT, &IType, &ItemHandle, &IRect);
- SetDialogItemText(ItemHandle, "\pwww.microsoft.com");
- SelectDialogItemText(DlogPtr, URL_TEXT, 0, 32767);
- }
-
- do
- {
- ModalDialog(NULL, &ItemHit);
- switch (ItemHit)
- {
- case OK_BUTTON:
- {
- Uchar8 URLStr[257];
-
- GetDialogItemText(ItemHandle, URLStr);
- *(URLStr + *URLStr + 1) = '\0';
- AX_IEGotoURL(SiteID, (char*)URLStr+1, NULL, NULL, NULL, true, true);
- }
- // intentional fall through
- case CANCEL_BUTTON:
- Done = true;
- break;
- default:
- break;
- }
- }
- while (!Done);
-
- DisposeDialog(DlogPtr);
- }
- }
-